<?php
/*
Este es el archivo principal del compilador
Se llamará pasándole un archivo, o una carpeta
Para cada archivo que vaya a compilar, creará un PageParser
Luego llamará a parse(), que recursivamente creará subparsers para sus controles
Después, llamará a buildSource() para crear el código. <NO>Esto también hará llamadas en cadena a sus hijos </NO>
*/

include("compiler/func.php");
include("compiler/CodeWriter.php");
include("compiler/CommonParser.php");
include("compiler/ContainerParser.php");
include("compiler/pageParser.php");
include("compiler/HtmlControlParser.php");
include("compiler/InputControlParser.php");
include("compiler/RegisteredControlParser.php");
include("compiler/userControlParser.php");
include("compiler/parserFactory.php");

include("clases/control.php");
include("clases/htmlControl.php");
include("clases/inputControl.php");
include("clases/container.php");
include("clases/page.php");

function compilar_archivo($file)
{
	global $recurse, $dest_dir;
	
	$parser = ParserFactory::GetParserFromFile($file);
	if($parser!=null)
	{
		echo "\nCompilando '$file'...\n";
		$t1 = time();
		$parser->parse();
		$output = $dest_dir."/".get_bin_name($file);
		file_put_contents($output, $parser->buildSource());
		$t2 = time();
		echo "OK ($output): ".(($t2-$t1)*1000)."ms\n";
		
		if($recurse)
		{
			$sources = $parser->getRegisteredControlSources();
			if(sizeof($sources)>0)
			{
				foreach($sources as $src)
				{
					compilar_archivo(dirname($file)."/".$src);
				}
			}
		}
	}
	else
	{
		"Skipped '$file'\n";
	}
}

$debug_level = 50;

$src_dir = $argv[1];
$dest_dir = $argv[2];
$recurse = true;

if(is_dir($src_dir))
{
	$dir = opendir($src_dir);
	while (($file = readdir($dir)) !== false)
	{
		//echo "$file\n";
		compilar_archivo($file);
	}
}
else
{
	compilar_archivo($src_dir);
}


?>